package cn.net.Collection;
/*
 测试List接口的普通方法、特有方法、集合间的方法
 */
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
总结：集合元素和数组一样，是按下标值0开始的。
      不能在打印语句里面用add添加元素方法。
 */
public class TestList {
    public static void main(String[] args) {
       // List list2 = new List();//List为Collection的子接口，不能创建对象

        List<String> list = new ArrayList<String>();//多态对象
        list.add("金");
        list.add("木");
        list.add("水");
        list.add("火");
        list.add("土");
        System.out.println(list);//[金, 木, 水, 火, 土]
//        list.clear();//true
//        System.out.println(list);//清空集合
        System.out.println("--------普通方法-----------------");
        System.out.println(list.contains("金"));
        System.out.println(list.hashCode());
        System.out.println(list.isEmpty());
        System.out.println(list.iterator());//java.util.ArrayList$Itr@1b6d3586
        System.out.println(list.remove("火"));
        System.out.println(list);//[金, 木, 水, 土]
        System.out.println(list.size());//4
        System.out.println(Arrays.toString(list.toArray()));//[金, 木, 水, 土]

        System.out.println("----------List接口特有方法--------------------");
        list.add("风");
        System.out.println(list);//元素追加
        list.add(1,"雷");//指定位置添加元素
        System.out.println(list);//[金, 雷, 木, 水, 土, 风]   0表示第一位， 1表示第二位。
        System.out.println(list.get(5));//获取指定下标值的[元素]。风。
        //System.out.println(list.add(5,"暗"));报错 X
        list.add(5,"暗");
        System.out.println(list);//把元素暗，放在下标数为5的位置。

        System.out.println(list.indexOf("金"));//0获取指定元素【第一次】出现的索引下标值
        System.out.println(list.lastIndexOf("风"));//6获取指定元素【最后一次】出现的索引下标值

        System.out.println(list.remove(1));//雷:删除指定下标值的[元素]。
        System.out.println(list);//[金, 木, 水, 土, 暗, 风]
        System.out.println(list.set(0,"光"));//光:重置指定位置的元素。覆盖原有元素
        System.out.println(list);//[光, 木, 水, 土, 暗, 风]

        List<String> sub = list.subList(1, 5);//截取子串，含头不含尾
        System.out.println(sub);//[木, 水, 土, 暗]

        System.out.println("----------两个集合间的方法操作------------------");
        List<String> list1 = new ArrayList<String>();
        list1.add("1");
        list1.add("2");
        list1.add("3");
        list1.add("4");
        //System.out.println(list.add(list1)); 报错，不能使用add添加
        System.out.println(list.addAll(list1));//true;集合之间添加只能用 addAll方法;元素后面追加
        System.out.println(list);//[光, 木, 水, 土, 暗, 风, 1, 2, 3, 4]
        System.out.println(list.addAll(0,list1));//true
        System.out.println(list);//[1, 2, 3, 4, 光, 木, 水, 土, 暗, 风, 1, 2, 3, 4]

        System.out.println(list.contains(list1));//false;list没有叫list1这个元素
        System.out.println(list.containsAll(list1));//true
        System.out.println(list.remove(list1));//删除首次:false;因为没有list1这个元素。
        System.out.println(list);//[1, 2, 3, 4, 光, 木, 水, 土, 暗, 风, 1, 2, 3, 4]
        System.out.println(list.removeAll(list1));//true
        System.out.println(list);//[光, 木, 水, 土, 暗, 风];只剩list集合元素



    }
}
